#include <iostream>
#include <sw/redis++/redis++.h>
#include <vector>
#include <thread>
#include <set>
#include "util.hpp"
using sw::redis::Redis;

void test1(Redis& redis)
{
    std::cout << "zadd 和 zrange" << std::endl;
    redis.flushall();
    redis.zadd("key","zzx",99);
    redis.zadd("key",{std::make_pair("lyn",98),std::make_pair("zb",89)});

    std::vector<std::pair<std::string,double>> members= {{"lyx",99},{"yjm",98}};
    redis.zadd("key",members.begin(),members.end());

    std::vector<std::string> membersresult;
    auto it = std::back_inserter(membersresult);
    redis.zrange("key",0,-1,it);
    PrintContainer(membersresult);

    std::vector<std::pair<std::string,double>> membersWithScore;
    auto it2 = std::back_inserter(membersWithScore);
    redis.zrange("key",0,-1,it2);
    printContainerPair(membersWithScore);
}
void test2(Redis& redis)
{
    std::cout << "zcard" << std::endl;
    redis.flushall();
    redis.zadd("key", "zhangsan", 90);
    redis.zadd("key", "lisi", 91);
    redis.zadd("key", "wangwu", 92);
    redis.zadd("key", "zhaoliu", 93);

    long long result = redis.zcard("key");
    std::cout << "result: " << result << std::endl;
}
void test3(Redis& redis)
{
    std::cout << "zrem" << std::endl;
    redis.flushall();

    redis.zadd("key", "zhangsan", 90);
    redis.zadd("key", "lisi", 91);
    redis.zadd("key", "wangwu", 92);
    redis.zadd("key", "zhaoliu", 93);

    redis.zrem("key", "zhangsan");
    long long result = redis.zcard("key");
    std::cout << "result: " << result << std::endl;
}
void test4(Redis& redis)
{
    std::cout << "zscore" << std::endl;
    redis.flushall();

    redis.zadd("key", "zhangsan", 90);
    redis.zadd("key", "lisi", 91);
    redis.zadd("key", "wangwu", 92);
    redis.zadd("key", "zhaoliu", 93);

    auto score = redis.zscore("key", "zhangsan");
    if (score) 
    {
        std::cout << "score: " << score.value() << std::endl;
    } 
    else 
    {
        std::cout << "score 无效" << std::endl;
    }
}
void test5(Redis& redis)
{
    std::cout << "zrank" << std::endl;
    redis.flushall();

    redis.zadd("key", "zhangsan", 90);
    redis.zadd("key", "lisi", 91);
    redis.zadd("key", "wangwu", 92);
    redis.zadd("key", "zhaoliu", 93);

    auto rank = redis.zrank("key", "zhaoliu");
    if (rank) 
    {
        std::cout << "rank: " << rank.value() << std::endl;
    } 
    else 
    {
        std::cout << "rank 无效" << std::endl;
    }
}

int main()
{
    Redis redis("tcp://127.0.0.1:6379");
    // test1(redis);
    // test2(redis);
    // test3(redis);
    //test4(redis);
    test5(redis);
    
}